package leetcode_800;

import helpclass.TreeNode;

/**
 *@author 周杨
 *MinimumDistanceBetweenBSTNodes_783 找出一颗BST里的值最接近的两个节点
 *describe:先序遍历 AC 71%
 *2018年10月21日 下午4:14:34
 */
public class MinimumDistanceBetweenBSTNodes_783 {
	Integer before=null;
	public int minDiffInBST(TreeNode root) {
       help(root);
       return this.min;
    }
	
	private void help(TreeNode root) {
		if(root.left!=null)
			help(root.left);
		if(before==null)
			before=root.val;
		else {
			min=Math.min(min, root.val-before);
			if(min==1)//最小值
				return ;
			before=root.val;
		}
		if(root.right!=null)
			help(root.right);
	}
	
	int min=Integer.MAX_VALUE;
	/**
	 * describe:思想错误 就比较当前两个节点 这是错误的
	 * 2018年10月21日 下午4:05:12
	 */
	public int minDiffInBST1(TreeNode root) {
        help(root);
        return this.min;
    }
	
	public void help1(TreeNode root) {
		int diff;
		if(root.left!=null) {
			diff=root.val-root.left.val;
			min=Math.min(min, diff);
			if(diff==1)
				return ;//这是最小值 因为没有重复的
			help1(root.left);
		}
		if(root.right!=null) {
			diff=root.right.val-root.val;
			min=Math.min(min, diff);
			if(diff==1)
				return ;
			help1(root.right);
		}
	}
}
